#if !defined(_MEMOIRE_H_)
#define _MEMOIRE_H_
#include "outils.h"
#include "semaphore.h"
#include <sys/shm.h>


/* Servira à créer le segment de mémoire partagée ou a acceder une mémoire ayant
 * la meme clé */

/* voir règles du jeu Domemo */

typedef struct sharedMem {
	int repartition[4][3];
	char nom[MAX_JOUEURS][LONG_NOM];
	char prenom[MAX_JOUEURS][LONG_NOM];
	int joueurs;
	int trouver[MAX_JOUEURS][MAX_PIONS_PAR_JOUEUR];
	int visible[MAX_PIONS_PAR_JOUEUR];
} sharedMem;

typedef struct sharedCounter {
	int lecteurs;
} sharedCounter;

/* va stocker le contenu lu dans la mémoire (2eme arg )
 * dans la structure passée comme 1er argument
 * appelée par le client ou le serveur
 * Les 2 derniers param sont un pointeur sur la structure contenant le compteur de nbre de process lecteurs
 * et le sempahoreSetID
 * */
extern void lecteur(sharedMem *, sharedMem *, sharedCounter*, int);

/* va écrire le contenu de l'adresse (1er argument) dans celui de la mémoire partagée ( 2eme argument ) .
 * Comme 3eme argument, ce sera le sémaphoreSetID
 *  appelé uniquement par le serveur */
extern void redacteur(sharedMem *, sharedMem *, int);

/*
 * le premier argument est la clé de la mémoire partagée, le deuxième est
 * la taille requise pour la mémoire partagée.
 * initialize le segment de la memoire partagee et renvoie son id.
 */
extern int shmInit(key_t, size_t size);

/*
 * attache une adresse memoire au segment de memoire partagee dont l'id est passe en param
 * et la renvoie
 *
 * Le second param est l'adresse à laquelle il faut attacher.On la renverra par la suite
 */
extern char* shmAttach(int, char*);

/* Affiche la mémoire lors de la lecture pour les tests du coté serveur */
extern void afficherMemoire(sharedMem *);

/* Permet d'écrire le contenu du deuxième argument dans le premier */
extern void ecrireMemoire(sharedMem *, sharedMem *);

#endif
